package com.uc3m.dsic.gestorZoo;

/**
 * Esta clase se caracteriza por los siguientes atributos: precio, tipo, idZoo
 *
 * @author Dario Peralta Vozmediano
 *
 */
public class Ticket {

    /**
     * Precio que tiene el ticket.
     */
    private double precio;
    /**
     * Tipo del ticket. Puede ser:
     * 	 Joven
     * 	 Adulto
     * 	 Grupo
     */
    private String tipo;
    /**
     * Objeto Zoo al que los tickets pertenecen.
     */
    private String idZoo;

    /**
     * Creacion de objeto tipo ticket.
     *
     * @param p
     * 		Precio del ticket.
     * @param t
     * 		Tipo del ticket.
     * @param z
     * 		Identificador del Zoo al que pertenece.
     * @throws ZooException
     * @throws Exception
     */
    public Ticket(String z, String t, double p) throws ZooException, Exception{
        if (!z.contains("'") && !t.contains("'")) {
            if(p >= 0){
                if (t.equalsIgnoreCase("Joven") || t.equalsIgnoreCase("Adulto")
                    || t.equalsIgnoreCase("Grupo")) {
                    GestorZoo gzoo = new GestorZoo();
                    Zoo zoo = gzoo.getZoobyId(z);
                    if (zoo != null) {
                        precio = p;
                        tipo = t;
                        idZoo = z;
                    } else {
                        throw new ZooException("No existe el zoo asociado al tick" 
                                + "et.\nPor favor introduza la clave de un zoo"
                                + " que exista");
                    }
                } else {
                    throw new ZooException("El tipo introducido para el ticket es "
                            + "incorrecto.\nEl tipo debe ser: Joven, Adulto, Grupo.");
                }
            }else{
                throw new ZooException("El precio nunca puede ser negativo");
            }
        } else {
            throw new ZooException ("No se admite el caracter '. "
                    + "Por favor, modifiquelo");
        }
    }

    /**
     * Obtiene el precio del ticket.
     *
     * @return Precio del ticket.
     */
    public double getPrecio() {
        return precio;
    }

    /**
     * Cambia el precio del ticket por un nuevo precio.
     *
     * @param p
     * 		Nuevo precio del ticket.
     */
    public void setPrecio(double p) {
        precio = p;
    }

    /**
     * Devuelve el tipo del ticket. Puede ser:
     * 	� Joven
     * 	� Adulto
     * 	� Grupo
     *
     * @return Tipo del ticket
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * Cambia el tipo del ticket. Los tipos aceptados son:
     * 	� Joven
     * 	� Adulto
     * 	� Grupo
     */
    public void setTipo(String t) {
        if (t.equalsIgnoreCase("Joven") || t.equalsIgnoreCase("Adulto")
                || t.equalsIgnoreCase("Grupo")) {
            tipo = t;
        }
    }

    /**
     * Devuelve el Zoo al que pertenece el ticket.
     *
     * @return Identificdor del Zoo relacionado con el ticket
     */
    public String getZoo() {
        return idZoo;
    }

    /**
     * Cambia el Zoo al que pertenece el ticket
     *
     * @param z
     *      Nuevo identificador de Zoo
     */
    public void setZoo(String z) {
        idZoo = z;
    }

     @Override
    public String toString() {
        return "('" + this.precio + "','" + this.tipo + "','" +this.idZoo + "')";
        //('atributo1', atributo1');
    }

    /**
     * Conversor de integer a string.
     *
     * @param parametro
     *          Numero a convertir en cadena de caracteres
     * @return El numero convertido en cadena de caracteres
     */
    public String toString(int parametro){
        String conversion = Integer.toString(parametro);
        return conversion;
    }

    /**
     * Inserción de tickets en la base de datos
     *
     * @throws Exception
     */
    public void insertarTickets() throws Exception {
        GestorZooInterface izoo = new GestorZooAplicacion();
        String inserta = "INSERT INTO TICKET VALUES";
        String parametros[] = {idZoo.trim().toUpperCase(),
                tipo.trim().toUpperCase(),
                new Double(precio).toString().trim().toUpperCase()};
        izoo.actualiza(inserta, parametros);
        izoo.cerrarBD();
    }

    /**
     * Borrado de un ticket de la base de datos a partir del identificador del
     * Zoo y del tipo del ticket.
     *
     * @throws Exception
     */
    public void borrarTickets() throws Exception {
        if (tipo.equalsIgnoreCase("adulto") || tipo.equalsIgnoreCase("joven")
                || tipo.equalsIgnoreCase("grupo")) {
            GestorZooInterface izoo = new GestorZooAplicacion();
            izoo.actualiza("DELETE FROM TICKET WHERE Id_zoo ='" 
                    + idZoo.trim().toUpperCase() + "' AND "
                    + "tipo = '" + tipo.trim().toUpperCase() + "';");
            izoo.cerrarBD(); 
        }
    }
}
